import re
'''
1、作用：匹配或查找符合某些规则的字符串
2、概念：记录文本规则的代码
3、特点：语法复杂，可读性差，单通用性强，适用于多种编程语言
4、使用流程：
    ① 导入re模块
         import re
    ② match匹配数据
         result = re.match("itc", "itcast")
    ③ group提取数据
         info = result.group()
         print(info)   # itc
TODO 5、匹配单个字符：

   .    任意1个字符串（除\n）
   []   []中列举的字符
   \d   0-9的数字
   \D   非数字
   \s   空白（空格、tab键）
   \S   非空白
   \w   非特殊字符（a-z、A-Z、0-9、汉字、-）
   \W   特殊字符（非字母、非数字、非汉字）
TODO 6、匹配多个字符：

   *    0次或无数次
   +    1次或无数次
   ？   0次或1次
   {m}   出现m次
   {m,n} 出现m至n次
TODO 7、匹配开头和结尾

   ^        开头
   $        结尾
   [^字符]   除字符外的其他字符
TODO 8、匹配分组

   |            |左右的任意一个表达式
   (ab)         括号中字符作为一个分组
   \\num         引用分组num匹配到的字符串
   (?p<name>)   分组起别名
   (?p=name)    引用别名为name分组匹配到的字符串

'''
result = re.match("itcast[123abc]", "itcast1")
if result:
    print(result.group())
else:
    print("没有匹配到")

re.match("itcast\d", "itcast1")  # 等价于re.match("itcast[0-9]", "itcast1")
re.match("itcast\D", "itcasta")
re.match("itcast\s111", "itcast 111")
re.match("itcast\S", "itcast?")

re.match("itcast\d*", "itcast12754222")

re.match("^\d.*", "23itcast")  # 必须以数字2开头（^\d），后面任意字符出现0次或无数次（.*）
re.match(".*\d$", "itcast88")  # 必须以数字8结尾（\d$）
re.match("^\d.*\d$", "23itcast88")  # 必须以数字开头、数字结尾
re.match("^\d.*[^4]$", "23itcast0")  # 必须以4除外的字符结尾

# 需求1：在fruit中获取apple和pear
fruit = ["apple", "banana", "orange", "pear"]
for i in fruit:
    result = re.match("apple|pear", i)
    if result:
        info = result.group()
        print("我想吃的水果是：", i)
    else:
        print("没有我想吃的水果")


# 需求2：匹配163、126、qq等邮箱
result = re.match("[a-zA-Z0-9_]{4,20}@(163|126|qq)\.com", "hello@163.com")
print(result.group())

# 需求3：匹配qq，提取出qq文字和qq号码
result = re.match("(qq):([1-9]\d{4,11})", "qq:10567")
qq = result.group(0)  # 或：qq = result.group()
type = result.group(1)
num = result.group(2)
print(qq)
print(type)
print(num)

# 需求4：匹配<html>hh</html>
result = re.match("<([a-zA-Z1-6]{4})>.*</\\1>", "<html>hh</html>")
print(result.group())

# 需求5：匹配<html><h1>www.itcast.cn</h1></html>
result = re.match("<([a-zA-Z1-6]{4})><([a-zA-Z1-6]{2})>.*</\\2></\\1>", "<html><h1>www.itcast.cn</h1></html>")
print(result.group())

# 需求6：匹配<html><h1>www.itcast.cn</h1></html>
result = re.match("<(?p<n1>[a-zA-Z1-6]{4})><(?p<n2>[a-zA-Z1-6]{2})>.*</(?p=n1)></(?p=n2)>", "<html><h1>www.itcast.cn</h1></html>")
print(result.group())